/**
 * 根据 v-numeral 绑定的类型来格式input输入的值，并通过执行绑定的函数传递出去
 * 格式1: digit-number。 如 v-numeral:digit-2="handle" 保留2位小数
 *       将 '12312.123' -> '12312.12'
 * 格式1: amount 如 v-numeral:amount-3="handle"
 *       将 '1123123.123' -> '1,123,123.123'
 * 上面两种形式不传保留位数默认保留整数
 * 需要传入一个 handle 函数，函数接收处理好的值
 * 使用如： <el-input v-model="maxAssignNum" v-numeral:amount-3="handle"/>
 * 如果只需要保留整数使用： <el-input v-model="maxAssignNum" v-numeral="handle"/>
 */
const numeralHandlers = {
  adapt(arg,float,fn) {
    this.arg = arg
    this.float = float
    this.fn = fn
    if (/digit/.test(arg)) {
      this.digit()
    } else if (/amount/.test(arg)) {
      this.amount()
    } else {
      this.default()
    }
  },
  digit() {
    const { arg, float ,fn } = this
    const digit = arg.split('-')[1] || 0
    fn(float.toFixed(digit))
  },
  amount() {
    const { arg,float } = this
    const digit = arg.split('-')[1] || 0
    const amount = Number(float).toLocaleString('zh', {
      style: 'decimal',
      maximumFractionDigits: digit
    })
    this.fn(amount)
  },
  default() {
    this.fn(this.float.toFixed(0))
  }
}
export default {
  bind:function(el,binding) {
    // 找到绑定元素下的input元素
    // const input = el.hasChildNodes() ? el.getElementsByTagName('input')[0] : el
    const {value:fn,arg} = binding
    if (typeof fn !== 'function') {
      return console.error('The param of directive "v-parse" must be a function!')
    }
    el.addEventListener('change',function(e) {
      let value = e.target.value

      let float = parseFloat(value)
      if (isNaN(float)) {
        fn('')
        return
      }
      numeralHandlers.adapt(arg,float,fn)
    })
  }
}